home *** CD-ROM | disk | FTP | other *** search
/ 5 Star Games: DOS Edition 2 / 5 Star Games - DOS Edition (1995)(Ready to Run).iso / dbc / db_sets.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-02-28  |  1.9 KB  |  97 lines

  1. /****************************************************************************/
  2. /*                         DATABOSS MODULE: DB_SETS.C                       */
  3. /****************************************************************************/
  4.  
  5. #include "db_lsc.h"
  6.  
  7. #include <stdarg.h>
  8. #include <stddef.h>
  9. #include <string.h>
  10. #include "db_types.h"
  11. #include "db_sets.h"
  12.  
  13. /*****************************  IMPLEMENTATION  *****************************/
  14.  
  15. void set_make(set s,...)
  16. {
  17.     va_list ap;
  18.     byte item;
  19.  
  20.     memset(s,0,sizeof(set));
  21.     va_start(ap,s);
  22.     while ((item = (byte) va_arg(ap,int)) != 0) set_addmember(s,item);
  23.     va_end(ap);
  24. }
  25.  
  26. void set_strmake(set s, string items)
  27. {
  28.     strptr item;
  29.  
  30.     memset(s,0,sizeof(set));
  31.     item = items;
  32.     while (*item) set_addmember(s,*(item++));
  33. }
  34.  
  35. void set_addmember(set s, byte item)
  36. {
  37.     byte indicy, bits;
  38.  
  39.     indicy = item/8;
  40.     bits = (byte) (1 << (item-(8*indicy)));
  41.     s[indicy] = s[indicy] | bits;
  42. }
  43.  
  44. void set_add(set s,...)
  45. {
  46.     va_list ap;
  47.     byte item;
  48.  
  49.     va_start(ap,s);
  50.     while ((item = (byte) va_arg(ap,int)) != 0) set_addmember(s,item);
  51.     va_end(ap);
  52. }
  53.  
  54. void set_delmember(set s, byte item)
  55. {
  56.     byte indicy, bits;
  57.  
  58.     indicy = item/8;
  59.     bits = (byte) (~(1 << (item-(8*indicy))));
  60.     s[indicy] = s[indicy] & bits;
  61. }
  62.  
  63. void set_del(set s,...)
  64. {
  65.     va_list ap;
  66.     byte item;
  67.  
  68.     va_start(ap,s);
  69.     while ((item = (byte) va_arg(ap,int)) != 0) set_delmember(s,item);
  70.     va_end(ap);
  71. }
  72.  
  73. bool set_member(set s, byte item)
  74. {
  75.     byte indicy, bits;
  76.  
  77.     indicy = item/8;
  78.     bits = (byte) (1 << (item-(8*indicy)));
  79.     return((bool) ((s[indicy] & bits) == bits));
  80. }
  81.  
  82. void set_union(set s, set s1, set s2)
  83. {
  84.     int i;
  85.  
  86.     for (i=0; i < sizeof(set); i++)    s[i] = s1[i] | s2[i];
  87. }
  88.  
  89. void set_intersection(set s, set s1, set s2)
  90. {
  91.     int i;
  92.  
  93.     for (i=0; i < sizeof(set); i++) s[i] = s1[i] & s2[i];
  94. }
  95.  
  96. /*****************************  END OF DB_SETS.C  ***************************/
  97.